import {
	reqGetCarList,
	reqGetShop,
	reqGetCart,
	reqDelCart,
	reqBatchDelCart,
	reqBatchCheckCart,
} from '@/api/shopcart'
export default {
	state: {
		cartInfoList: [],
	},
	actions: {
		// 获取购物车列表
		async getCartInfoList({ commit }) {
			const res = await reqGetCarList()
			if (res[0]) {
				commit('GET_CART_INFO_LIST', res[0].cartInfoList)
			} else {
				commit('GET_CART_INFO_LIST', [])
			}
		},
		// 更新服务端商品数量
		async updateCartSkuNum({ commit }, { skuId, newSkuNum, oldSkuNum }) {
			// 用新值减去旧值 得到差值
			const skuNum = newSkuNum - oldSkuNum
			await reqGetShop(skuId, skuNum)
			commit('UPDATE_CART_SKU_NUM', { skuId, newSkuNum })
		},
		// 更新服务端商品选中状态
		async updateCartChecked({ commit }, { skuId, isChecked }) {
			await reqGetCart(skuId, isChecked)
			commit('UPDATE_CART_CHECKED', { skuId, isChecked })
		},
		// 删除服务端单个商品
		async delCart({ commit }, skuId) {
			await reqDelCart(skuId)
			commit('DEL_CART', skuId)
		},
		// 删除服务端多个商品
		async batchDelCart({ commit, state }) {
			console.log(1);
			const skuIdList = state.cartInfoList.reduce((prev, cart) => {
				if (cart.isChecked) {
					return [...prev, cart.skuId]
				} else {
					return prev
				}
			}, [])
			await reqBatchDelCart(skuIdList)
			commit('BATCH_DEL_CART', skuIdList)
		},
		// 更新服务端全选状态
		async batchCheckCart({ commit, state }, isChecked) {
			const skuIdList = state.cartInfoList.reduce((prev, cart) => {
				/*
          根据传过来的isChecked判断是否加入要进行改变的数组中  
          如：true 把 为false的商品加入到数组中 
             false 把 true 的商品加入到数组中
         */
				if (cart.isChecked !== isChecked) {
					return [...prev, cart.skuId]
				} else {
					return prev
				}
			}, [])
			await reqBatchCheckCart(skuIdList, isChecked)
			commit('BATCH_CHECK_CART', isChecked)
		},
	},
	mutations: {
		// 获取购物车列表
		GET_CART_INFO_LIST(state, cartInfoList) {
			state.cartInfoList = cartInfoList
		},
		// 更新客户端商品数量
		UPDATE_CART_SKU_NUM(state, { skuId, newSkuNum }) {
			// 找到要修改最新值的那个商品
			const cart = state.cartInfoList.find((cart) => cart.skuId === skuId)
			cart.skuNum = newSkuNum
		},
		// 更新客户端商品选中
		UPDATE_CART_CHECKED(state, { skuId, isChecked }) {
			// find 查找到为true的那个遍历对象
			const cart = state.cartInfoList.find((cart) => cart.skuId === skuId)
			// 修改
			cart.isChecked = isChecked
		},
		// 删除客户端商品
		DEL_CART(state, skuId) {
			state.cartInfoList = state.cartInfoList.filter(
				(cart) => cart.skuId !== skuId
			)
		},
		// 删除选中客户端商品
		BATCH_DEL_CART(state) {
      // 把没选中的过滤出来
			state.cartInfoList = state.cartInfoList.filter((cart) => !cart.isChecked)
		},
		// 更新客户端全选状态
		BATCH_CHECK_CART(state, isChecked) {
      // 直接把所有的商品状态 赋值成 全选按钮的状态
			state.cartInfoList.forEach((cart) => (cart.isChecked = isChecked))
		},
	},
	namespaced: true,
}
